package com.example.bar_chart;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.os.Bundle;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.formatter.ValueFormatter;

import java.util.ArrayList;

@Route(path = BarChartActivity.PATH)
public class BarChartActivity extends AppCompatActivity {
    public static final String PATH = "/bar_chart/simple";
    public static final String TITLE = "简易条形图";

    private BarChart barChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bar_chart);
        setTitle(TITLE);

        barChart = findViewById(R.id.bar_chart);

        // 设置最大可见绘制的 chart count 的数量。
        // 只在 setDrawValues() 设置为 true 时有效。
        barChart.setMaxVisibleValueCount(60);

        // 设置是否绘制背景
        barChart.setDrawGridBackground(false);
        // 设置是否绘制边框
        barChart.setDrawBorders(false);
        // 设置是否可以缩放图表
        barChart.setScaleEnabled(true);
        // 设置是否可以用手指移动图表
        barChart.setDragEnabled(true);
        // 数据背后是否用灰色来标识最高未完成的最高值，禁用可提高性能
        barChart.setDrawBarShadow(false);
        barChart.setDrawBorders(false);

        barChart.getDescription().setEnabled(false);
        barChart.getLegend().setEnabled(false);

        barChart.getXAxis().setDrawGridLines(false);
        barChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
        barChart.getAxisLeft().setDrawGridLines(false);
        barChart.getAxisLeft().setAxisMinimum(-1);
        barChart.getAxisRight().setEnabled(false);

        barChart.setBorderWidth(10);
        barChart.setBorderColor(0x00FF0000);

        // 数据是否显示在柱子上面
        barChart.setRenderer(new RoundBarChartRenderer(barChart, barChart.getAnimator(), barChart.getViewPortHandler()));

//        ValueFormatter yAxisFormatter;
        setData(10, 5);
    }


    private void setData(int count, float range) {
        ArrayList<BarEntry> values = new ArrayList<>();

        for (int i = 1; i < count; i++) {
            float val = (float) (Math.random() * range * 100);
            values.add(new BarEntry(i, val));
        }

        BarDataSet dataSet = new BarDataSet(values, "This is BarDataSet label.");

//        dataSet.setGradientColor(
//                ContextCompat.getColor(this, R.color.value_start),
//                ContextCompat.getColor(this, R.color.value_end)
//        );
        dataSet.setColor(ContextCompat.getColor(this, R.color.value_end));
        dataSet.setHighlightEnabled(false);

        BarData data = new BarData(dataSet);
        data.setBarWidth(0.5f);
        data.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                return Integer.toString((int) value);
            }
        });

        barChart.setData(data);
    }
}
